from sqlmodel import SQLModel, Field
from typing import Optional, Any
from datetime import datetime
from pydantic import BaseModel


def F(title: Optional[str]) -> Any:
    return Field(title=title)


# ************** 异常驾驶行为的表 *****************

class BaseFeedback(BaseModel):
    id_: int = Field(primary_key=True)
    content: Optional[str] = Field(default=None, title='反馈内容')
    time: Optional[datetime] = Field(default=None, title='反馈时间')
    name: Optional[str] = Field(default=None, title='反馈人姓名')
    mobile: Optional[str] = Field(default=None, title='反馈人手机号')
    user_id: Optional[str] = Field(default=None, title='renterId/司机id')


class FeedbackInDb(BaseFeedback, SQLModel, table=True):
    __tablename__ = 'feedback_info'

    user_type: Optional[int] = Field(default=None, title='反馈人类型', description='0：乘客1：司机 2：分时租赁用户')
    type: Optional[int] = Field(default=None, title='反馈类型',
                                description='司机端：1-扣费申诉2-乘客物品丢失3-我要报备4-听单异常5-帐号封禁6-成功率下降7-其他。用户端：1-司机以各种理由不来接我2-联系不上/找不到司机3-对司机服务不满意4-车辆或信息不符5-司机危险驾驶6-车内设施或环境卫生不满意7-绕路、不认路8-多扣款项9-支付失败10-其他 分时租赁用户：1-找不到车 2-计费有问题 3-租车押金相关问题 4-开锁/锁门一直失败 5-车辆无法启动 6-导航问题 7-找不到取车/还车站点 8-其他')
    source: Optional[int] = Field(default=None, title='投诉来源', description='0、网约车app；1、网约车客服 ； 2、分时租赁app； 3、分时租赁客服')
    state: Optional[int] = Field(default=None, title='处理状态', description='0、处理中 1、已处理')
    del_state: Optional[int] = Field(default=None, title='删除标识', description='0：未删除 1：已删除')


class FeedbackConverted(BaseFeedback):
    user_type: Optional[str] = Field(default=None, title='反馈人类型')
    type: Optional[str] = Field(default=None, title='反馈类型')
    source: Optional[str] = Field(default=None, title='投诉来源')
    state: Optional[str] = Field(default=None, title='处理状态')
    del_state: Optional[str] = Field(default=None, title='删除标识')


# ************** 违章的表 *****************

class BaseViolation(BaseModel):
    id_: int = Field(primary_key=True)
    renter_id: Optional[int] = F('租户ID')
    business_id: Optional[int] = Field(title='订单 ID', description='可能是用户订单ID或地服订单ID，根据前面的订单类型')
    vehicle_id: Optional[int] = F('车辆 ID')
    description: Optional[str] = F('事故描述')
    vio_time: Optional[datetime] = F('违章时间')
    address: Optional[str] = F('违章地点')
    points: Optional[int] = F('扣除分数')
    amount: Optional[int] = F('罚款金额，单位分')
    nature: Optional[str] = F('事故性质(轻微\一般\严重)')
    repair_cost: Optional[int] = F('事故维修费用,单位分')
    outage_cost: Optional[int] = F('停运费用，单位分')
    deal_content: Optional[str] = F('处理描述')
    create_time: Optional[datetime] = F('创建时间')
    update_time: Optional[datetime] = F('更新时间')


class ViolationInDb(BaseViolation, SQLModel, table=True):
    __tablename__ = 'violation_info'

    v_type: Optional[int] = F('1-违章，2-事故')
    order_type: Optional[int] = F('1-用户订单，2-地服订单')
    handel_state: Optional[int] = F('0-未处理，1-处理中，2-已处理')
    pay_state: Optional[int] = F('违章交款状态')


class ViolationConverted(BaseViolation):
    v_type: Optional[str] = F('违章 or 事故')
    order_type: Optional[str] = F('订单类型')
    handel_state: Optional[str] = F('处理状态')
    pay_state: Optional[str] = F('违章交款状态')


# ************** 投诉的表 *****************

class BaseComplaint(BaseModel):
    id_: int = Field(primary_key=True)
    complaint_code: Optional[str] = F('投诉编号')
    complaint_time: Optional[datetime] = F('投诉时间')
    complaint_type: Optional[int] = F('投诉类型')
    city_name: Optional[str] = F('城市名称')
    order_id: Optional[str] = F('订单号')
    driver_id: Optional[int] = F('司机 ID')
    driver_name: Optional[str] = F('司机姓名')
    driver_mobile: Optional[str] = F('司机手机号')
    renter_id: Optional[int] = F('用户 ID')
    renter_mobile: Optional[str] = F('用户手机号')
    reason: Optional[str] = F('投诉原因')
    result_reason: Optional[str] = F('处理说明')
    create_user: Optional[str] = F('创建人')
    create_time: Optional[datetime] = F('创建时间')
    update_user: Optional[str] = F('更新操作人')
    update_time: Optional[datetime] = F('更新时间')
    all_code_name: Optional[str] = F('投诉编码名称全称，以横杠隔开')


class ComplaintInDb(BaseComplaint, SQLModel, table=True):
    __tablename__ = 'complaint_info'

    complaint_source: Optional[int] = F('投诉来源,1-用户，2-司机')
    business_type: Optional[int] = F('业务类型，1-快车，2出租车，3-专车')
    state: Optional[int] = Field(title='状态', description='0-待处理，1-处理中，2-已处理，3-处理失败')
    complaint_result: Optional[int] = Field(title='投诉认定', description='投诉认定：0-未处理，1-成立，2-不成立，3-其他')
    del_state: Optional[int] = Field(title='删除状态', description='0-正常，1-删除')
    create_type: Optional[int] = Field(title='创建方式', description='1系统创建 2人工创建 3客服系统创建')


class ComplaintConverted(BaseComplaint):
    complaint_source: Optional[str] = F('投诉来源,1-用户，2-司机')
    business_type: Optional[str] = F('业务类型，1-快车，2出租车，3-专车')
    state: Optional[str] = Field(title='状态')
    complaint_result: Optional[str] = Field(title='投诉认定')
    del_state: Optional[str] = Field(title='删除状态')
    create_type: Optional[str] = Field(title='创建方式')
